<?php
declare (strict_types = 1);
// 1908080121李定邦、1902030115李龙烽
namespace app\ldblf_forum\controller;

// use think\facade\View;
// use think\Request;
use app\BaseController;
use think\exception\ValidateException;

// use think\facade\Db;
// use think\facade\Session;
// use think\facade\Route;
// use think\Paginator;

class Index extends BaseController
{
    // 注册控制器中间件
    protected $middleware = [
        'tc'        =>      ['only'     =>      ['detail','doresgister']],
    ];
    /**
     * 显示资源列表
     *
     * @return \think\Response
     */
    public function index()
    {
        //渲染默认的模板页面
        // app/ldblf_forum/view/index/index.html
        // return View::fetch();
        // dump('这是Index方法打印的内容!');
        return app('view') -> fetch();
    }

    public function view(int $sid = 0)
    {
        // 1908080121李定邦、1902030115李龙烽
        // 视图查询：查询版块1下的所有帖子，
        // 包括帖子标题、作者，发帖数据、作者头像、版块名称
        // n张表，应该有n-1个约束条件，一个view只能存放一个约束条件
        // $mes = Db::view('mes','m_sid,m_id,m_title,m_unick,m_createat,m_content')
        $mes = app('db')->view('mes','m_sid,m_id,m_title,m_unick,m_createat,m_content')
            // 后续的每一个view必须给出第三个参数：约束条件
            ->view('user','u_img','mes.m_unick = user.u_nick')
            ->view('section','s_name','mes.m_sid = section.s_id');
        if ($sid <> 0) {
            # 代表查询指定版块
            $mes = $mes->where('m_sid',$sid);
        }
        $mes = $mes->order('m_createat','desc')
            // ->select();
            // 分页查询
            -> paginate(5);
        // 获取分页的页码
        $page = $mes -> render();
        dump($page);
        // 获取帖子总数
        $sum = $mes -> total();
        dump($sum);
        // 添加回复数量
        foreach ($mes as $key => $post) {
            // $post['num'] = Db::name('res')->where('r_mid',$post['m_id'])->count();
            $post['num'] = app('db')->name('res')->where('r_mid',$post['m_id'])->count();
            $mes[$key] =$post;
        }
        dump($mes);
        // 获取所有的板块
        $sec = $this->listSec();
        // return View::fetch('',['mes' => $mes, 'sec' => $sec, 'page' => $page, 'sum' => $sum]);
        return app('view')->fetch('',['mes' => $mes, 'sec' => $sec, 'page' => $page, 'sum' => $sum]);
    }

    /*
    *
    */
    public function detail(int $mid)
    {
        // 查询mid为1的帖子详细信息，包括：标题、内容、作者、发布时间、头像、板块名称
        // $mes = Db::view('mes','m_id,m_title,m_content,m_unick,m_createat')
        $mes = app('db') -> view('mes','m_id,m_title,m_content,m_unick,m_createat')
            ->view('user','u_img','mes.m_unick = user.u_nick')
            ->view('section','s_name','mes.m_sid = section.s_id')
            ->where('m_id',$mid)
            ->order('m_createat','desc')
            ->find();
        dump($mes);
        // 查询mid为1的帖子的所有回复详细信息，包括：回复内容、作者、发布时间、头像
        // $res = Db::view('res','r_content,r_unick,r_createat')
        $res = app('db') -> view('res','r_content,r_unick,r_createat')
            ->view('user','u_img','res.r_unick = user.u_nick')
            ->where('r_mid',$mid)
            ->order('r_createat')
            // ->select();
            // 分页查询
            -> paginate(4);
        // 获取分页的页码
        $page = $res -> render();
        dump($page);
        // 获取帖子总数
        $sum = $res -> total();
        // dump($sum);
        // dump($res);

        $num = count($res);
        $this->check();

        // 获取所有的板块
        // $mec = $this->listMec($mid);
        // 渲染+模板赋值
        // return View::fetch('',['mes' => $mes , 'res' => $res , 'num' => $num ,'page' => $page, 'sum' => $sum]);
        return app('view')->fetch('',['mes' => $mes , 'res' => $res , 'num' => $num ,'page' => $page, 'sum' => $sum]);
    }
    /*
    * 回复执行
    */
    public function doDetail(int $mid)
    {
        // 查票，防止匿名访问
        $this->check();
        // 提取帖子的信息
        $rCon = $this->request->post('rcontent','','htmlspecialchars');
        // 组织数组
        $data = [
            'r_content'     =>      $rCon,
            // 'r_unick'       =>      Session::get('uNick'),
            'r_unick'       =>      app('session')->get('uNick'),
            'r_mid'         =>      $mid,
        ];
        // $res = Db::name('res')->insert($data);
        $res = app('db')->name('res')->insert($data);
        // 判断结果，跳转
        if ($res == 1) {
            # 回复成功
            // $this->success('回复成功！',(string)Route::buildUrl('index/detail',['mid'=>$mid]));
            $this->success('回复成功！',(string)app('route')->buildUrl('index/detail',['mid'=>$mid]));
        } else{
            #回复失败
            $this->error('回复失败！');
        }
    }

    public function post(int $sid = 0)
    {
        // 查票，防止匿名访问
        // $this->check();
        try {
            // 验证Sid的合法性
            validate(get_class(app('fcheck')))
                ->scene('islog')
                ->check([
                    'islog'     =>      app('session')->get('unick'),
                    'sid'       =>      $sid
                ]);
        }catch(ValidateException $e) {
            $this -> error('发生错误!' .$e->getError(),'index/index');
        }
        // 获取所有的版块
        // sid的值是0，查询所有版块
        // sid的值不是0，查询指定版块
        $sec = $this->listSec($sid);
        dump($sec);
        // return View::fetch('',['sec' => $sec]);
        return app('view')->fetch('',['sec' => $sec]);
    }

    /*
    * 执行帖子的写入
    */
    public function doPost(int $sid)
    {
        // 查票，防止匿名访问
        $this->check();
        // 提取帖子的信息
        // $mTitle = $this->request->post('mtitle','','htmlspecialchars');
        $mCon = $this->request->post('mcontent','','htmlspecialchars');
        // $mSid = $this->request->post('sid');
        // 组织数组
        $data = [
            // 'm_title'       =>      $mTitle,
            'm_content'     =>      $mCon,
            // 'm_unick'       =>      Session::get('uNick'),
            'm_unick'       =>      app('session')->get('uNick'),
            'm_sid'         =>      $sid
        ];
        // 写入
        // $mes = Db::name('mes')->insert($data);
        $mes = app('db')->name('mes')->insert($data);
        // dump($mes);
        // 判断结果，跳转
        if ($mes == 1) {
            # 发帖成功
            // $this->success('发帖成功！',(string)Route::buildUrl('index/view',['sid'=>$sid]));
            $this->success('发帖成功！',(string)app('route')->buildUrl('index/view',['sid'=>$sid]));
        } else{
            #发帖失败
            $this->error('发帖失败！');
        }
    }

    /**
     * 显示创建资源表单页.
     *
     * @return \think\Response
     */
    public function aCreate()
    {
        //acreate.html
        // return View::fetch();
        return app('view')->fetch();
    }

    // /**
    //  * 保存新建的资源
    //  *
    //  * @param  \think\Request  $request
    //  * @return \think\Response
    //  */
    // public function save(Request $request)
    // {
    //     //
    // }

    // /**
    //  * 显示指定的资源
    //  *
    //  * @param  int  $id
    //  * @return \think\Response
    //  */
    // public function read($id)
    // {
    //     //
    // }

    // /**
    //  * 显示编辑资源表单页.
    //  *
    //  * @param  int  $id
    //  * @return \think\Response
    //  */
    // public function edit($id)
    // {
    //     //
    // }

    // /**
    //  * 保存更新的资源
    //  *
    //  * @param  \think\Request  $request
    //  * @param  int  $id
    //  * @return \think\Response
    //  */
    // public function update(Request $request, $id)
    // {
    //     //
    // }

    // /**
    //  * 删除指定资源
    //  *
    //  * @param  int  $id
    //  * @return \think\Response
    //  */
    // public function delete($id)
    // {
    //     //
    // }
}
